package com.mastercard.assets.web.struts.actions;

import java.io.IOException;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.catalina.startup.UserConfig;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;

import com.mastercard.assets.MasterCardException;
import com.mastercard.assets.jpa.TblCuenta;
import com.mastercard.assets.jpa.TblCuentaPaquete;
import com.mastercard.assets.jpa.TblRole;
import com.mastercard.assets.jpa.TblTipoCuenta;
import com.mastercard.assets.util.MCUtil;
import com.mastercard.assets.util.dao.MasterCardDAO;
import com.mastercard.assets.web.struts.forms.*;
import com.mastercard.assets.web.util.to.ManejadorPaquetesSolicitar;
import com.mastercard.assets.web.util.to.UserLogin;

public class PaquetesAsignar
	extends
		Action
{
	public ActionForward execute(
							ActionMapping mapping , 
							ActionForm form ,
							HttpServletRequest request , 
							HttpServletResponse response )
		throws 
			IOException , 
			ServletException
	{
		HttpSession session = request.getSession( ) ;
		
		// en caos de null
		if( session == null )
			return mapping.findForward( "noLogin" ) ;
		
		// toma el userLogin
		UserLogin user = ( UserLogin ) session.getAttribute( "UserLogin" ) ;
		
		// en caso de null
		if( user == null )
			return mapping.findForward( "noLogin" ) ;
		
		CuentaElegidaForm f = ( CuentaElegidaForm ) form ;
		user.getActualCountType( ) ;
//		try
//		{
			// realiza la actualizacion del rol
//			user.setActualCountId( f.getCount( ) ) ;
//		}catch( MasterCardException mce )
//		{
//			// en caso de error, revisa el error
//			switch( mce.getErrorCode( ) )
//			{
//				case MCUtil.MASTERCARD_ERROR_CODE_USERLOGIN_USER_MUST_BE_LOGGEDIN : 
//				case MCUtil.MASTERCARD_ERROR_CODE_USERLOGIN_USER_THERE_IS_NO_EXIST_THAT_COUNT :
//					return mapping.findForward( "noLogin" ) ;
//			}
//		}
                
                /*
                 Inicia busqueda de paquetes
                 */
//                int cveCuenta = f.getCount();
//                int cveCuenta = user.getActualCountId();
//                TblTipoCuenta tc = user.getCountType( ) ;
//
//		System.out.println( "ListarPaquetesAsignadosBuscarPaquetes.java: " + cveCuenta ) ;
//		TblCuenta cuenta = MasterCardDAO.findCountById( cveCuenta ) ;
//		TblTipoCuenta tipoCuenta = cuenta.getTblTipoCuenta( ) ;
//		GenerarCampanaForm f1 = new GenerarCampanaForm( ) ;
//		SolicitarPaqueteRegistrarForm f2 = new SolicitarPaqueteRegistrarForm( ) ;  
//                
//		List<TblCuentaPaquete> paquetesAsignados = MasterCardDAO.getPaquetesAsignados( cveCuenta, tipoCuenta.getCveTipoCuenta( ) ) ;
//		try
//		{
//			
//                        try
//		{
//			ManejadorPaquetesSolicitar manejador = new ManejadorPaquetesSolicitar( ) ;
//			manejador.setCveTipoCuenta( tipoCuenta.getCveTipoCuenta( ) ) ;
//			manejador.setCveCuenta( cveCuenta ) ;
//			manejador.initialize( ) ;
//			f2.setPackageManager( manejador ) ;
//			request.setAttribute( "SolicitarPaqueteRegistrarForm" , f2 ) ;
//			request.setAttribute( "paquetesAsignados" , paquetesAsignados ) ;
//			
//		}catch( MasterCardException mce )
//		{
//			user.setMessageError( mce.getSingularMessage( ) ) ;
//			user.setNextWorkArea( "" ) ;
//		}
//                        f1.setCveCuenta( cveCuenta ) ;
//			f1.getPackageManager( ).initialize( ) ;
//			
//			request.setAttribute( "GenerarCampanaForm" , f1 ) ;
//                /*
//                 Termina busqueda de paquetes
//                 */
//                
//		user.setNextWorkArea( "/WEB-INF/pages/WorkArea/PaquetesAsignar.jsp" );
//                
//	  	return mapping.findForward( "success" ) ;
//	}catch( MasterCardException mce ){
//			user.setMessageError( mce.getSingularMessage( ) ) ;
//			
//			user.setNextWorkArea( "/WEB-INF/pages/WorkArea/ListarPaquetesAsignadosError.jsp" ) ;
//			
//		  	return mapping.findForward( "success" ) ;
//		}
                // NEW CHANGE
                
//                                int cveCuenta = user.getActualCountId();
                TblTipoCuenta tipoCuenta = user.getCountType( ) ;

//		System.out.println( "ListarPaquetesAsignadosBuscarPaquetes.java: " + cveCuenta ) ;
//		TblCuenta cuenta = MasterCardDAO.findCountById( cveCuenta ) ;
//		TblTipoCuenta tipoCuenta = cuenta.getTblTipoCuenta( ) ;
//		GenerarCampanaForm f1 = new GenerarCampanaForm( ) ;
		SolicitarPaqueteRegistrarForm f2 = new SolicitarPaqueteRegistrarForm( ) ;  
                
//		List<TblCuentaPaquete> paquetesAsignados = MasterCardDAO.getPaquetesAsignados( cveCuenta, tipoCuenta.getCveTipoCuenta( ) ) ;
		
                        try
		{
			ManejadorPaquetesSolicitar manejador = new ManejadorPaquetesSolicitar( ) ;
			manejador.setCveTipoCuenta( tipoCuenta.getCveTipoCuenta( ) ) ;
//			manejador.setCveCuenta( cveCuenta ) ;
			manejador.initializeBDMTitular( ) ;
			f2.setPackageManager( manejador ) ;
			request.setAttribute( "SolicitarPaqueteRegistrarForm" , f2 ) ;
//			request.setAttribute( "paquetesAsignados" , paquetesAsignados ) ;
			
		}catch( MasterCardException mce )
		{
			user.setMessageError( mce.getSingularMessage( ) ) ;
			user.setNextWorkArea( "" ) ;
		}
//                        f1.setCveCuenta( cveCuenta ) ;
//			f1.getPackageManager( ).initialize( ) ;
//			
//			request.setAttribute( "GenerarCampanaForm" , f1 ) ;
                /*
                 Termina busqueda de paquetes
                 */
                
		user.setNextWorkArea( "/WEB-INF/pages/WorkArea/PaquetesAsignar.jsp" );
                
                MasterCardDAO.closeEntityManager( ) ;
	  	return mapping.findForward( "success" ) ;
	
    }
}